package com.fpf.lab01_basics;

public class Demo4_SleepJoin {
    /**
     * 启动线程a和b
     * 线程a开始执行，进入休眠状态
     * 线程b开始执行，遇到a.join()，进入等待状态
     * 1秒后，线程a休眠结束，打印"a结束"，线程a执行完毕
     * 线程b收到a线程结束的通知，继续执行，打印"b结束"
     *
     * @param args
     */
    public static void main(String[] args) {
        Thread a = new Thread(() -> {
            try {
                Thread.sleep(1000);
                System.out.println("a结束");
            } catch (InterruptedException e) {
                /*
                sleep()和join()都会抛出InterruptedException，需要捕获处理
                当线程被中断时，会抛出此异常，可以用来安全地终止线程
                 */
            }
        });
        Thread b = new Thread(() -> {
            try {
                a.join(); //等a线程结束
                System.out.println("b结束");
            } catch (InterruptedException e) {
                /*
                    线程休眠：sleep()方法可以暂停线程执行，常用于模拟耗时操作或定时任务
                    线程等待：join()方法可以让一个线程等待另一个线程完成，常用于线程间依赖的场景
                 */
            }
        });
        a.start();
        b.start();
    }
}
